﻿<?php
/**
 * 定义有关管理员登录有关操作
 * 的类
 *
 * @author kinet<38511703@qq.com>
 * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
 */
class admin_login_process{
	
	private $db_obj_admin ;
	private $db ;
	private $request ;
	//此处会不会重复?定义了表名
	private $table_name;
	function __construct( $db , $request=null ){

		$this->db = $db ;
		@$this->request = $request ;
		$this->db_obj_admin = new db_obj_admin( $db );
		//初始化db_obj_user对象
		
		
		$this->table_name = $this->db_obj_admin->get_table_name() ;
	}

	public function do_signin(){

		/**
		 *需要先判断用户的状态 只有为"offline"时
		 *才允许执行login操作.否则表示用户已登录
		 *或者因其他原因没有登录的权限
		 */
 
		//判断用户相应的会话变量是否已经存在若是
		//则抛出异常
		if ( !empty($_SESSION['admin']) ){

			throw new Exception( '用户已登录:会话变量不为空:'.$_SESSION['admin']);
		}

		@$admin = $this->request['admin'] ;
		@$passwd = $this->request['passwd'] ;
        echo "$this->table_name";
		$sql = "select * from $this->table_name where admin='$admin' and passwd=md5('$passwd')" ;
		
		$res = $this->db->query( $sql ) ;
		if (pear::iserror($res)) {


			//此处应替换为异常
			throw new Exception('登录时数据库查询异常:'.$sql.':'.$res->getMessage() );
		}
		//返回结果数为1才被视为成功登陆
		if ( $res->NumRows() == 1 ){
			$last_login_time = date("Y-m-d H:i:s",time()+8*60*60);
			$last_login_ipadd = $_SERVER['REMOTE_ADDR'];

			//登录成功之后更改用户的状态为online
			//并存对象于session之中，完成登录操作
			
			$this->db_obj_admin->load('admin' , $admin ) ;			
			$this->db_obj_admin->set( 'last_login_time' , $last_login_time );
			$this->db_obj_admin->set( 'last_login_ipadd' , $last_login_ipadd );			
			$this->db_obj_admin->save();			
			$_SESSION['admin'] = $this->db_obj_admin->get('admin');

			return true;
		//无返回结果被视为登录失败	
		}elseif($res->NumRows() == 0){ 
		
			return false ;
		//其他的结果数则表明数据表中有异常存在
		}else{
			throw new Exception('数据库异常:用户名'.$this->request['admin'].'不唯一.');
		}
	}

	//此方法表面应该是一个静态的貌似
	//其实不然
	function do_logout(){

		if( @$_SESSION['admin'] ){

			$_SESSION['admin'] = array() ;

			return true ;
		}else{
			return false ;
		}
	}

}
	
